home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer)…68k, x86, SPARC, PA-RISC] / NeXTSTEP 3.3 Dev Intel.iso / NextDeveloper / Headers / architecture / hppa / byte_order.h < prev    next >
Text File  |  1994-06-08  |  3KB  |  157 lines

  1. /*
  2.  * Copyright (c) 1992 NeXT Computer, Inc.
  3.  *
  4.  * Byte ordering conversion (for m68k).
  5.  *
  6.  * HISTORY
  7.  *
  8.  * 8 October 1992 David E. Bohman at NeXT
  9.  *    Converted to NXxxx versions.  Condensed history.
  10.  *
  11.  * 28 August 1992 Bruce Martin @NeXT
  12.  *    Created.
  13.  */
  14.  
  15. static __inline__
  16. unsigned short
  17. NXSwapShort(
  18.     unsigned short    inv
  19. )
  20. {
  21.     union sconv {
  22.     unsigned short    us;
  23.     unsigned char    uc[2];
  24.     } *inp, outv;
  25.     
  26.     inp = (union sconv *)&inv;
  27.     
  28.     outv.uc[0] = inp->uc[1];
  29.     outv.uc[1] = inp->uc[0];
  30.     
  31.     return (outv.us);
  32. }
  33.  
  34. static __inline__
  35. unsigned int
  36. NXSwapInt(
  37.     unsigned int    inv
  38. )
  39. {
  40.     union iconv {
  41.     unsigned int    ui;
  42.     unsigned char    uc[4];
  43.     } *inp, outv;
  44.     
  45.     inp = (union iconv *)&inv;
  46.     
  47.     outv.uc[0] = inp->uc[3];
  48.     outv.uc[1] = inp->uc[2];
  49.     outv.uc[2] = inp->uc[1];
  50.     outv.uc[3] = inp->uc[0];
  51.     
  52.     return (outv.ui);
  53. }
  54.  
  55. static __inline__
  56. unsigned long
  57. NXSwapLong(
  58.     unsigned long    inv
  59. )
  60. {
  61.     union lconv {
  62.     unsigned long    ul;
  63.     unsigned char    uc[4];
  64.     } *inp, outv;
  65.     
  66.     inp = (union lconv *)&inv;
  67.     
  68.     outv.uc[0] = inp->uc[3];
  69.     outv.uc[1] = inp->uc[2];
  70.     outv.uc[2] = inp->uc[1];
  71.     outv.uc[3] = inp->uc[0];
  72.     
  73.     return (outv.ul);
  74. }
  75.  
  76. static __inline__
  77. unsigned long long
  78. NXSwapLongLong(
  79.     unsigned long long    inv
  80. )
  81. {
  82.     union llconv {
  83.     unsigned long long    ull;
  84.     unsigned char        uc[8];
  85.     } *inp, outv;
  86.     
  87.     inp = (union llconv *)&inv;
  88.     
  89.     outv.uc[0] = inp->uc[7];
  90.     outv.uc[1] = inp->uc[6];
  91.     outv.uc[2] = inp->uc[5];
  92.     outv.uc[3] = inp->uc[4];
  93.     outv.uc[4] = inp->uc[3];
  94.     outv.uc[5] = inp->uc[2];
  95.     outv.uc[6] = inp->uc[1];
  96.     outv.uc[7] = inp->uc[0];
  97.     
  98.     return (outv.ull);
  99. }
  100.  
  101. #ifndef KERNEL
  102.  
  103. static __inline__ NXSwappedFloat
  104. NXConvertHostFloatToSwapped(float x)
  105. {
  106.     union fconv {
  107.     float number;
  108.     NXSwappedFloat sf;
  109.     };
  110.     return ((union fconv *)&x)->sf;
  111. }
  112.  
  113. static __inline__ float
  114. NXConvertSwappedFloatToHost(NXSwappedFloat x)
  115. {
  116.     union fconv {
  117.     float number;
  118.     NXSwappedFloat sf;
  119.     };
  120.     return ((union fconv *)&x)->number;
  121. }
  122.  
  123. static __inline__ NXSwappedDouble
  124. NXConvertHostDoubleToSwapped(double x)
  125. {
  126.     union dconv {
  127.     double number;
  128.     NXSwappedDouble sd;
  129.     };
  130.     return ((union dconv *)&x)->sd;
  131. }
  132.  
  133. static __inline__ double
  134. NXConvertSwappedDoubleToHost(NXSwappedDouble x)
  135. {
  136.     union dconv {
  137.     double number;
  138.     NXSwappedDouble sd;
  139.     };
  140.     return ((union dconv *)&x)->number;
  141. }
  142.  
  143. static __inline__ NXSwappedFloat
  144. NXSwapFloat(NXSwappedFloat x)
  145. {
  146.     return NXSwapLong(x);
  147. }
  148.  
  149. static __inline__ NXSwappedDouble
  150. NXSwapDouble(NXSwappedDouble x)
  151. {
  152.     return NXSwapLongLong(x);
  153. }
  154.  
  155. #endif KERNEL
  156.  
  157.